package org.soderiakelvy.controller.sujeto;

import java.io.Serializable;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.soderiakelvy.controller.util.Constante;
import org.soderiakelvy.model.domain.ComercializacionMesVencidoVO;
import org.soderiakelvy.model.domain.ComercializacionPackVO;
import org.soderiakelvy.model.domain.FrioCalorVO;
import org.soderiakelvy.model.domain.SucursalFrioCalorVO;
import org.soderiakelvy.model.domain.SucursalVO;
import org.soderiakelvy.model.service.ProductoServicio;
import org.soderiakelvy.model.service.SucursalServicio;
import org.soderiakelvy.model.service.imp.ProductoServicioImp;
import org.soderiakelvy.model.service.imp.SucursalServicioImp;
import org.soderiakelvy.model.util.ConstantModel;

@ManagedBean
@ViewScoped
public class SucursalAsignarEquipos implements Serializable{
	private static final long serialVersionUID = 1L;
	
	//--- VO & SERVICE ---
	private SucursalVO sucursal;
	private FrioCalorVO frioCalor;
	private SucursalServicio serviceSucursal;
	private ComercializacionMesVencidoVO comercializacionMesVencido;
	private ComercializacionPackVO comercializacionPackNew,comercializacionPackOld;
	
	//--- LIST ---
	private List<SucursalFrioCalorVO> equiposAsignados;
	private List<FrioCalorVO> equiposEncontrados;
	private List<SucursalVO> sucursalesEncontradas;
	private List<ComercializacionPackVO> comercializacionesPack;
	//--- VARIABLES ---
	private boolean isComMesVen, isComPack;
	private String codigoSucursal;
	
	
	//--- CONSTRUCTOR ---
	public SucursalAsignarEquipos(){
		serviceSucursal = new SucursalServicioImp();
		sucursal = new SucursalVO();
		frioCalor = new FrioCalorVO();
	}
	//-------------------
	
	public void buscarSucursales(SucursalVO sucursal){
		this.sucursal = sucursal;
		sucursalesEncontradas = serviceSucursal.getSucursalesBySucursal(getSucursal());
		
		System.out.println("buscando sucursal...");
		System.out.println("Cantidad encontradas: "+sucursalesEncontradas.size());
	}

	public void cargarSucursalSeleccionada(SucursalVO suc){
		this.sucursal = suc;
		System.out.println("Sucursal seleccionada "+sucursal.getNombre());
		getTipoComercializacionOfSucursal(this.sucursal);
	}
	public void buscarPorCodigoSucursal(){
		
	}
	
	public void limpiarSucursal(){
		System.out.println("Limpiando sucursal...");
		this.sucursal  = new SucursalVO();
	}
	
	
	private void getTipoComercializacionOfSucursal(SucursalVO suc){
		SucursalServicio ss = new SucursalServicioImp();
		this.comercializacionesPack = ss.getComercializacionesPackBySucursal(suc);
		if(comercializacionesPack != null){
			System.out.println("ComercializacionPack encontrada: "+ comercializacionesPack.size());
			for(ComercializacionPackVO cp: comercializacionesPack){
				if(cp.getFechaDesasignacion()== null){
					comercializacionPackNew = cp;
				}else {
					if(cp.getFechaAsignacion() != null){
						comercializacionPackOld = cp;
					}
				}
			}
			getEquiposSucursalFrioCalorAsignados();
		}
		
	}
	
	private void getEquiposSucursalFrioCalorAsignados(){
		SucursalServicio ss = new SucursalServicioImp();
		equiposAsignados = ss.getSucursalFrioCalorBySucursal(getSucursal());
	}
	
	public void buscarEquiposFrioCalor(FrioCalorVO fc){
		ProductoServicio ser = new ProductoServicioImp();
		equiposEncontrados = ser.getEquiposFrioCalorByFrioCalorTipoEstado(fc,ConstantModel.FRIO_CALOR_NO_AGUA_DE_RED,ConstantModel.ESTADO_FRIO_CALOR.FABRICA.getEstado());
		System.out.println("Se encontraron "+ equiposEncontrados.size());
	}
	
	public void asignarEquipoFrioCalor(FrioCalorVO fc){
		if(comercializacionPackOld !=  null){ 
			// es una comercializacion Pack
			if(comercializacionMesVencido.getCantidadMinima() <= equiposAsignados.size()){
				SucursalFrioCalorVO sfc = new SucursalFrioCalorVO();
				sfc.setFrioCalor(fc);
				sfc.setUbicacion("");
				equiposAsignados.add(sfc);
				SucursalServicio service = new SucursalServicioImp();
				service.assignEquiposSucursal2(getSucursal(), equiposAsignados,Constante.COMERCIALIZACION_PACK,1);
				getEquiposSucursalFrioCalorAsignados();
			}else {
				System.out.println("No puede asignar mas de "+ equiposAsignados.size() + " equipos.");
			}
		}else {
			if(comercializacionMesVencido != null){
				
			}
		}
	}
	
	
	//--- GET AND SET ---
	
	public static long getSerialversionuid() {
		return serialVersionUID;
	}

	public SucursalVO getSucursal() {
		return sucursal;
	}

	public FrioCalorVO getFrioCalor() {
		return frioCalor;
	}

	public List<SucursalFrioCalorVO> getEquiposAsignados() {
		return equiposAsignados;
	}

	public String getCodigoSucursal() {
		return codigoSucursal;
	}

	public List<SucursalVO> getSucursalesEncontradas(){
		return sucursalesEncontradas;
	}

	public List<ComercializacionPackVO> getComercializacionesPack() {
		return comercializacionesPack;
	}
	
	public List<FrioCalorVO> getEquiposEncontrados(){
		return equiposEncontrados;
	}
}
